package com.jsg.sl651.message.parser.impl;

import com.jsg.sl651.constant.EncodingElementIdentifier;
import com.jsg.sl651.entity.data.Element;
import com.jsg.sl651.enums.CommunicationMessageType;
import com.jsg.sl651.enums.WindDirectionEnum;
import com.jsg.sl651.message.parser.Parser;
import com.jsg.sl651.message.parser.model.EnumData;

/**
 * 风向枚举解析器
 */
public class WindDirectionParser implements Parser<EnumData> {
    /**
     * 解析Hex模式下的数据
     * <p>方法核心</p>
     * <ul>
     *     <li>解析该字节数组</li>
     *     <li>数据生成相应的数据对象{@link CommunicationMessageType}</li>
     * </ul>
     *
     * @param element 数据类型定义 {@link EncodingElementIdentifier.EncodingElement}
     * @param bytes   字节数组
     * @return 解析出来的数据对象
     */
    @Override
    public Element<EnumData> parserHexImpl(EncodingElementIdentifier.EncodingElement element, byte[] bytes) throws Exception {
        WindDirectionEnum byCode = WindDirectionEnum.getByCode(bytes[0]);
        return new Element<>(bytes, new EnumData(byCode.getCode(), byCode.getName()), element);
    }

    /**
     * 解析Hex模式下的数据
     * <p>方法核心</p>
     * <ul>
     *     <li>解析该字节数组</li>
     *     <li>数据生成相应的数据对象{@link CommunicationMessageType}</li>
     * </ul>
     *
     * @param element 数据类型定义 {@link EncodingElementIdentifier.EncodingElement}
     * @param bytes   字节数组
     * @return 解析出来的数据对象
     */
    @Override
    public Element<EnumData> parserAsciiImpl(EncodingElementIdentifier.EncodingElement element, byte[] bytes) throws Exception {
        int i = Integer.parseInt(bytesToString(bytes));
        WindDirectionEnum anEnum = WindDirectionEnum.getByCode(i);
        return new Element<>(bytes, new EnumData(anEnum.getCode(), anEnum.getName()), element);
    }
}
